from random import randint
from meiduo_mall.utils import constants
from celery_tasks.sms.tasks import send_sms_code
from rest_framework.response import Response
from meiduo_mall.libs.yuntongxun.sms import CCP


from django.shortcuts import render

# Create your views here.
# 发送验证码接口
from django_redis import get_redis_connection
from rest_framework.views import APIView
"""分析：
获取验证码,需要传递一个手机号码
GET  通过url携带参数手机号码
路由验证手机号码格式
查询该手机号码是否注册过
生成短信验证码
使用第三方插件云通讯来发送短信验证码
返回一个状态给前端
"""

class SMSCodeView(APIView):

    def get(self, request, mobile):

        # 使用redis管道pipeline来减少对数据库的访问
        conn = get_redis_connection('verify')

        if conn.get('send_flag_%s'%mobile):
            return Response({'message':'发送短信过于频繁'})
        # 生成短信验证码
        sms_code = '%06d'%randint(0, 999999)

        # 创建pl管道对象
        pl = conn.pipeline()
        # 保存短信验证码到redis管道中
        pl.setex('sms_code_%s'%mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code)
        pl.setex('send_flag_%s'%mobile, constants.SEND_FLAG_EXPIRES, 1)
        # 执行
        pl.execute()
        # 使用云通讯发送短信验证码
        send_sms_code.delay(mobile, sms_code, constants.SMS_CODE_REDIS_EXPIRES/60)
        # 结果返回
        return Response({"message": "ok"})






